package http

import (
	"gitee.com/sdynasty/clever/errors"
	"github.com/gin-gonic/gin"
	"net/http"
)



// CheckSign 签名检测
func CheckSign() gin.HandlerFunc {
	return func(c *gin.Context) {
	//	var mobj protocol.BaseParameter
	//	rb, err := ioutil.ReadAll(c.Request.Body)
	//	if err != nil {
	//		err = errors.WithMessage(err, "Read Body")
	//		goto FAIL
	//	}
	//	c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(rb))
	//
	//	err = json.Unmarshal(rb, &mobj)
	//	if err != nil || mobj.GetProductID() == 0 {
	//		err = errors.WithMessage(err, "GetProductID=0")
	//		goto FAIL
	//	}
	//	//验签
	//	err = utils.SignVerify(signObj, rb)
	//	if err != nil {
	//		err = errors.WithMessage(err, "验签")
	//		goto FAIL
	//	}
	//	return
	//FAIL:
	//	AbortError(c, http.StatusUnauthorized, err)
	}
}

const (
	CtxErrorKey = "_error_"
	CtxCode = "_code_"
	CtxRequestBodyKey = "_req_body_"
	CtxResponseBodyKey = "_res_body_"
)

// ResponseFailed 错误返回
func ResponseFailed(c *gin.Context, e error) {
	ce := errors.FromError(e)
	if ce == nil {
		c.JSON(http.StatusOK, ce)
	} else {
		c.Set(CtxErrorKey, ce)
		c.JSON(int(ce.Code), ce)
	}
	c.Abort()
}

// ResponseOK 正常
func ResponseOK(c *gin.Context, data interface{}) {
	c.Set(CtxResponseBodyKey, data)
	c.JSON(http.StatusOK, data)
}

//
//// ResponseFailedWithSign 正常/错误返回，有签名
//func ResponseFailedWithSign(c *gin.Context, ce cerror.CError) {
//	data := &protocol.BaseResponseWithSign{}
//
//	data.SetCode(ce.GetCode())
//	data.SetErrMsg(ce.GetMessage())
//	_, err := utils.SignObject(signObj, data)
//	if err != nil {
//		AbortError(c, http.StatusUnauthorized, err)
//		return
//	}
//	ResponseNoSign(c, data)
//}
//
//// ResponseWithSign 正常/错误返回，有签名
//func ResponseWithSign(c *gin.Context, data protocol.IBaseResponseWithSign) {
//	_, err := utils.SignObject(signObj, data)
//	if err != nil {
//		AbortError(c, http.StatusUnauthorized, err)
//		return
//	}
//	ResponseNoSign(c, data)
//}
//
//// ResponseNoSign 正常/错误返回，无签名
//func ResponseNoSign(c *gin.Context, data protocol.IBaseResponse) {
//	c.Set(CtxCode, data.GetCode())
//	c.Set(CtxErrorKey, data.GetErrMsg())
//	c.JSON(http.StatusOK, data)
//}

